/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package envioyreciboficheros;

import java.net.*;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.io.*;

public class Servidor {

    private static ObjectOutputStream envioObjeto;
    private static DataOutput envioPrimitivo;
    private static DataInputStream entradaPrimitiva;
    private static ObjectInputStream entradaObjeto;

    public static void main(String[] args) {

        try {
            ServerSocket servidor = new ServerSocket(7895);

            System.out.println("Escuchando");
            Socket cliente = servidor.accept();

            String frase = "";

            envioObjeto = new ObjectOutputStream(cliente.getOutputStream());
            envioPrimitivo = new DataOutputStream(cliente.getOutputStream());
            entradaPrimitiva = new DataInputStream(cliente.getInputStream());
            entradaObjeto = new ObjectInputStream(cliente.getInputStream());

            while (!frase.equalsIgnoreCase("salir")) {
                System.out.println("Escuchando");
                frase = entradaPrimitiva.readUTF();
                ejecutarComandos(frase);
            }

        } catch (Exception e) {
            System.out.println(e);
        }

    }

    public static void ejecutarComandos(String frase) throws Exception {
        String[] comando = frase.split(":");

        if (comando[0].equalsIgnoreCase("LIST")) {
        } else if (comando[0].equalsIgnoreCase("PUT")) {
            recibirFichero(comando[1]);
        } else if (comando[0].equalsIgnoreCase("MKDIR")){
            System.out.println("Creando carpeta:" + comando[1]);
            File carpeta = new File(comando[1]);
            System.out.println(carpeta.mkdir());
        }
    }

    public static void recibirFichero(String direccionFichero) throws Exception {
        File ficheroEscribir = new File(direccionFichero);
        FileOutputStream escribirFichero = new FileOutputStream(ficheroEscribir);

        int in;
        byte[] buffer = new byte[1024];
        int tammanoFichero = entradaPrimitiva.readInt();
        int tammanoFicheroSuma = 0;

        System.out.println("Recibiendo fichero");

        while ((in = entradaPrimitiva.read(buffer)) != -1) {
            escribirFichero.write(buffer, 0, in);
            
            tammanoFicheroSuma += in;
            if(tammanoFicheroSuma == tammanoFichero || in < 1024)break;
        }

        escribirFichero.close();

    }
}
